// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (vm) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = 'https://api.shop.eduwork.cn/'; /* 根域名 */
        return config
    })
	
	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	    // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		// console.log(config)
	    config.data = config.data || {}
		// 根据custom参数中配置的是否需要token，添加对应的请求头
		
		config.header.Authorization = "Bearer "+ vm.vuex_token;
		// if(config?.custom?.auth) {
		// 	// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
		// 	// config.header.token = vm.$store.state.userInfo.token
		// 	//存放在vuex中的token，假设使用了uView封装的vuex方式  这个access_token是缓存token指定的变量名，可以根据自己缓存的变量名更改
		// 	console.log("添加token");
		// 	config.header.Authorization = "Bearer "+ vm.access_token;
		// }
		
		//对某个特殊的url做处理
		// if(config.url == '/user/login') config.header.noToken=true; 
		
	    return config 
	}, config => { // 可使用async await 做异步操作
	    return Promise.reject(config)
	})
	
	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response
		// console.log(data);
		// 自定义参数
		if (data.statusCode !== 200) {
			if (data.statusCode === 201) { //注册成功
				return data === undefined ? {} : data;
			}else if (data.statusCode === 204) { //注册成功
				return data === undefined ? {} : data;
			}
			else{
				// 否则返回一个pending中的promise，请求不会进入catch中
				return new Promise(() => { })
			}
		}
		return data.data === undefined ? {} : data.data;
	}, (response) => { 
		// 对响应错误做点什么 （statusCode !== 200）
		// console.log(response);
		const data = response;
		if(data.statusCode<400){ //由于后端设置，如果小于400 都算成功了
			return data.data === undefined ? {} : data.data
		}
		else if(data.statusCode == 400){
			//错误的请求
			uni.$u.toast(data.data.message);
			return false;
		}
		else if(data.statusCode == 401){
			// 一共有两种结果：一种是密码错误认证未通过， 一种是没有token或token过期
			
			if(data.data.message === "Unauthorized"){
				uni.$u.toast('账号或密码错误');
			}else{
				// 如果请求了需要登陆的api  需要跳转登录
				uni.$u.utils.isLogin();
			}
			return false;
		}else if(data.statusCode == 422){
			//错误的请求 表单验证未通过
			const {errors} = data.data;
			uni.$u.toast(Object.values(errors)[0][0]);
			return false;
		}else{
			return Promise.reject(response);
		}
	})
	//增加patch请求
	uni.$u.http.patch = (url,params={},header={}) => {
		// 模拟patch请求
		const _params = {
			...params,
			_method: 'PATCH'
		}
		return uni.$u.http.post(url, _params,header)
	}
}